package cn.java75.sp.dao;


import cn.java75.sp.entity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Cacheable//(key="student")
@CacheConfig(cacheNames = "student",keyGenerator = "schoolkey",cacheManager = "cacheManager")
public interface StudentDao {
    //CRUD
    @CacheEvict(allEntries=true,cacheNames = "student")
    int add(Student stu);

    //根据主键改其他列，一般只改一个实体
    int update(Student stu);

    public int updatePass(@Param("stuno") long stuno, @Param("newPass") String newPass, @Param("oldPass") String oldPass);

    int del(Student stu);

    //根据主键，读取其他的信息
    Student get(long stuno);

    //查询全部的学生
    List<Student> findALL();

//    List<Student> search(int pageNo, int pageSize);
//
//    List<Student> search(String sname, String qq, String telephone);

    /**
     * 查询条件，从第三个开始，如果没有，则忽略
     * @param pageNo
     * @param pageSize
     * @param sname
     * @param qq
     * @param telephone
     * @param start
     * @param end
     * @return
     */
    @Cacheable
    public List<Student> search(@Param("pageNo") int pageNo, @Param("pageSize") int pageSize, @Param("sname") String sname, @Param("qq") String qq, @Param("telephone") String telephone, @Param("startDate") Date start, @Param("endDate") Date end);
    @Cacheable
    public int searchTotal(@Param("sname") String sname, @Param("qq") String qq, @Param("telephone") String telephone, @Param("startDate") Date start, @Param("endDate") Date end);

    //按照入学时间的起止时间和姓名,QQ,telephone,wechat来查询
//    public List<Student> search2(int pageNo, int pageSize, String sname, Date start, Date end);
    //#{p.sname}
    public List<Student> search2(@Param("pageNo") int pageNo, @Param("pageSize") int pageSize, @Param("p") Map<String, Object> params);
    public int countNums();


    //删除多个学生
    public int delStus(@Param("stunos") long[] stunos);

    //所有查询条件，放入Params
    public List<Student> search3(@Param("p") Map<String, Object> params);

    //sex =1表示男，0表示女，2,表示妖， 其他值，表示null
    public List<Student> searchBySex(@Param("s") Integer sex);

    public List<Student> searchByEnterDate(@Param("date") Integer date);

    //
    public List<Map<String,Integer>> queryCityInfo();
}
